package main.java.aplicacion.juegos.interfaces;

import main.java.datatypes.comentarios.ComentarioVO;
import main.java.datatypes.juegos.JuegoVO;
import main.java.datatypes.juegos.CompraVO;
import main.java.datatypes.juegos.CompraJuegoVO;
import main.java.datatypes.juegos.VersionVO;
import main.java.aplicacion.juegos.entidades.Juego;
import main.java.aplicacion.juegos.excepciones.JuegoError;
import main.java.aplicacion.usuarios.excepciones.UsuarioError;
import java.util.List;
import java.util.Date;
import main.java.aplicacion.ManejadorSistemaError;
import main.java.aplicacion.categorias.excepciones.CategoriaError;
import main.java.aplicacion.comentarios.excepciones.ComentarioError;

public interface JuegoMgt {
	
	/**
	 *Agrega el juego dtJuego al sistema.
	 * 
	 * @param dtJuego
	 * @throws JuegoError
	 */
	public void agregarJuego(JuegoVO dtJuego) throws JuegoError; 
	
	/**
	 * Agrega al juego con nombre nombreJuego la categoria con nombre nombreCat.
	 * 
	 * @param nombreJuego
	 * @param nombreCat
	 */
	public void agregarCategoria(String nombreJuego, String nombreCat);
	
	/**
	 * Agrega al juego con nombre nombre la descripcion descr.
	 * @param nombre
	 * @param descr
	 */
	public void agregarDescr(String nombre, String descr);
	
	/**
	 * Agrega Comentario en respuesta al comentario respondeA para el juego juego con la fecha y horas en formato string 
	 * 
	 * @param respondeA
	 * @param cliente
	 * @param juego
	 * @param fecha 
	 * @param hora
	 * @param texto
	 * 
	 * @return en identificador del comentario ingresado.
	 */
	public int agregarComentario(int respondeA, String cliente, String juego, String fecha, String hora, String texto);
	
	/**
	 * Agrega Comentario en respuesta al comentario respondeA para el juego juego para la fecha fecha
	 * 
	 * @param respondeA
	 * @param cliente
	 * @param juego
	 * @param fecha
	 * @param texto
	 * @return
	 */
	public int agregarComentario(int respondeA, String cliente, String juego, Date fecha , String texto);
	
	List<String> altaJuego(String nombre, double tamano, double precio, String descripcion) throws ManejadorSistemaError, JuegoError;

	public List<String> seleccionarCategorias(List<String> cat) throws ManejadorSistemaError;
	
	public boolean existeJuego(JuegoVO dtJuego);
	
	public boolean existeJuego(Juego juego);

	public int seleccionarDesarrollador(String nombre, String nombrej, String dsc, double tam, double p, List<String> cat) throws JuegoError, UsuarioError;

	public List<String> consultarJuego() throws ManejadorSistemaError;

	public List<String> seleccionarCategoria(String nom) throws CategoriaError, ManejadorSistemaError;

	public JuegoVO seleccionarJuego(String nom) throws JuegoError;

	public CompraVO seleccionarJuego(String juego, String nick, Date f);
	
	public Juego find(String nom);
	
	public List<CompraJuegoVO> comprarJuego();

	public void confirmarCompra(Date f, String cliente, String juego );

	public List<String> listarJuegos() throws ManejadorSistemaError;
	
	public List<ComentarioVO> nuevoComentario(String juego) throws JuegoError;
	
	public int ingresarDatosComentario(ComentarioVO com) throws ComentarioError;

	public JuegoVO obtenerJuego(String string);
	
	public boolean ClientePuedeComprar(String j, String nick);
	
	public List<VersionVO> listarJuegosPendientes();
	
	public void aceptarVersion(VersionVO version);
	
	public void rechazarVersion(VersionVO version, String motivo);

	public boolean existeVersionPendienteAprobada(String nombreJuego, String numero);
	// public boolean existeJuego(JuegoVO dtJuego);
	
	public List<String> seleccionarCategoriaWeb(String nom) throws CategoriaError, ManejadorSistemaError ;
	
	public JuegoVO seleccionarJuegoWeb(String nom) throws JuegoError ;
	
	public String getLinkJuego(String nom);
	
	public void altaVersionJuego(String nombreJuego, String numeroVersion,  double tamanio, String dirVersion);

	public void crearJuego(String nombre, String cat, String dev, String tam, String precio);

	public List<JuegoVO> listarJuegosVO();
}

